package com.medsys.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
 * Classe para representar uma consulta
 * @author Felipe Lauksas
 *
 */
@Entity
@Table(name="consultas")
public class Consulta implements Serializable {

	/**
	 * Construtor com parametros
	 * @param status
	 * @param data
	 * @param medico
	 * @param paciente
	 * @param receituarios
	 */
	public Consulta(String status, Date data, Medico medico, Paciente paciente,
			List<Receituario> receituarios) {
		super();
		setStatus(status);
		setData(data);
		setMedico(medico);
		setPaciente(paciente);
		setReceiturarios(receituarios);
	}
	
	public Consulta() {
		
	}
	/**
	 * 
	 */
	private static final long serialVersionUID = 6284510432523454695L;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id_consulta")
	private Long idConsulta;
	@Column(name="status")
	private String status;
	
	@Column(name="data")
	@Temporal(TemporalType.TIMESTAMP)
	private Date data;	
	
	@ManyToOne(fetch=FetchType.EAGER)	
	@JoinColumn(name="medicos",referencedColumnName="id_pessoa",nullable=false)
	private Medico medico;
	
	@ManyToOne(fetch=FetchType.EAGER)	
	@JoinColumn(name="pacientes",referencedColumnName="id_pessoa",nullable=false)
	private Paciente paciente;
	@OneToMany(mappedBy="consulta",fetch=FetchType.LAZY)
	private List<Receituario> receituarios;
	/**
	 * @return the status
	 */
	public String getStatus() {
		return status;
	}
	/**
	 * @param status the status to set
	 */
	public void setStatus(String status) {
		this.status = status;
	}
	/**
	 * @return the data
	 */
	public Date getData() {
		return data;
	}
	/**
	 * @param data the data to set
	 */
	public void setData(Date data) {
		this.data = data;
	}
	/**
	 * @return the medico
	 */
	public Medico getMedico() {
		return medico;
	}
	/**
	 * @param medico the medico to set
	 */
	public void setMedico(Medico medico) {
		this.medico = medico;
	}
	/**
	 * @return the paciente
	 */
	public Paciente getPaciente() {
		return paciente;
	}
	/**
	 * @param paciente the paciente to set
	 */
	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}
	
	/**
	 * @return the idConsulta
	 */
	public Long getIdConsulta() {
		return idConsulta;
	}
	/**
	 * @param idConsulta the idConsulta to set
	 */
	public void setIdConsulta(Long idConsulta) {
		this.idConsulta = idConsulta;
	}
	/**
	 * @return the serialversionuid
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	/**
	 * @return the receituarios
	 */
	public List<Receituario> getReceiturarios() {
		return receituarios;
	}
	/**
	 * @param receituarios the receituarios to set
	 */
	public void setReceiturarios(List<Receituario> receituarios) {
		this.receituarios = receituarios;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((idConsulta == null) ? 0 : idConsulta.hashCode());
		return result;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Consulta other = (Consulta) obj;
		if (idConsulta == null) {
			if (other.idConsulta != null)
				return false;
		} else if (!idConsulta.equals(other.idConsulta))
			return false;
		return true;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "\nConsulta ID:" + idConsulta + "\n" +
				"Status: " + status + "\n" +
				"Data: " + data + "\n" +
				"Medico: " + medico.getNome() + "\n"+
				"Paciente: " + paciente.getNome() + "\n";
	}
	

}
